#include <sstream>
#include <string>
#include <set>
#include <vector>
#include <map>

#include <iostream>

#include "types.h"

// Токенизатор "по пробелам"
// Плох тем, что не умеет отделять знаки препинания от слов. Кроме того, он неправильно
// обрабатывает цепочку пробелов.
class CSpaceTokenizer : public ITokenizer {
public:
  virtual std::vector<span> Tokenize(std::string s) const {
    std::vector<span> v;
    size_t start = 0;
    size_t i = 0;
    for (i = 0; i < s.length(); ++i) {
      if (' ' == s[i]) {
        v.push_back(span(start, i - start));
        start = i + 1;
      }
    }

    if (i > start)
      v.push_back(span(start, i - start));

    return v;
  }
};

// Хороший, умный токенизатор
class CMyTokenizer : public ITokenizer {
public:
  virtual std::vector<span> Tokenize(std::string s) const {
    std::vector<span> v;
    // TODO: сделать хорошую, умную токенизацию
    return v;
  }
};
